home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Sound / DIGISPIELEN.LST < prev    next >
File List  |  1989-06-01  |  2KB  |  69 lines

  1. ' Digitale Sounds spielen
  2. @lesen
  3. @einschalten
  4. '
  5. ' Ton erklingt solange, bis eine Maustaste gedrückt wird
  6. REPEAT
  7. UNTIL MOUSEK
  8. '
  9. @ausschalten
  10. END
  11. ' Hauptprogramm Ende
  12. '
  13. PROCEDURE lesen
  14.   ' Um die Routine allgemein zu halten, wird FILESELECT benutzt
  15.   FILESELECT "Sample laden","Laden",":",sample$
  16.   '
  17.   ' Sicherheitsabfrage, ob überhaupt ein Sample geladen werden
  18.   ' soll
  19.   IF sample$="" OR RIGHT$(sample$)=":"
  20.     PRINT "Kein Sample laden ?"
  21.     END
  22.   ENDIF
  23.   '
  24.   ' Die Länge des Samples ermitteln
  25.   OPEN "I",#1,sample$
  26.   lÄnge&=LOF(#1)
  27.   CLOSE #1
  28.   ' Die Wortlänge des Samples darf nicht 65535 (=&Hffff) überschreiten,
  29.   ' da das Audio-Datenlängen-Register nur wortlang ist.
  30.   IF SHR(lÄnge&,1)>65000
  31.     PRINT "Sampledatei zu lang"
  32.     END
  33.   ENDIF
  34.   '
  35.   ' Reservierung des erforderlichen Datenspeichers.
  36.   ' Chip-Memory soll reserviert werden, darum Code &H2.
  37.   speicheradr%=MALLOC(lÄnge&,&H2)
  38.   '
  39.   ' Sicherheitsabfrage, ob der Speicher reserviert werden konnte
  40.   IF speicheradr%=0
  41.     PRINT "Speicher kann nicht reserviert werden!"
  42.     PRINT "Bitte alle anderen Fenster oder Programme schließen, bzw. beenden!"
  43.     END
  44.   ENDIF
  45.   '
  46.   ' Informationen ausgeben:
  47.   PRINT "Sample-Namen:   ";sample$
  48.   PRINT "Größe:          ";lÄnge&
  49.   PRINT "Adresse:        ";HEX$(speicheradr%)
  50.   ' Das eigentliche Laden:
  51.   BLOAD sample$,speicheradr%
  52. RETURN
  53. PROCEDURE einschalten
  54.   ' Jetzt werden die Audio-Register für Kanal 0 mit Daten versorgt
  55.   DPOKE &HDFF096,1              ! DMA Kanal 0 stoppen
  56.   LONG{&HDFF0A0}=speicheradr%   ! Adresse der Daten übergeben
  57.   DPOKE &HDFF0A4,SHR(lÄnge&,1)  ! Länge in Worten übergeben
  58.   DPOKE &HDFF0A6,100            ! Sample Period setzen
  59.   DPOKE &HDFF0A8,64             ! Lautstärke einstellen
  60.   DPOKE &HDFF096,&H8201         ! DMA Kanal 0 einschalten
  61. RETURN
  62. PROCEDURE ausschalten
  63.   ' Ausschalten des Tons und Speicherrückgabe
  64.   DPOKE &HDFF096,1                      ! DMA stoppen = Ton aus
  65.   frei%=MFREE(speicheradr%,lÄnge&)      ! Speicher freigeben
  66.   PRINT
  67.   PRINT "Freigegeben:";frei%
  68. RETURN
  69.